--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_database_pragma_safety.py bce42bcdce0e7d2c6d78228e864a4cd1d974cc82 (bce42bcd) Text, 2.33 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787os
Tff7b72import T7ee787tempfile
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Tb4b4b4(
Te6edf3DatabaseTb4b4b4,
Te6edf3_sanitize_pragma_read_nameTb4b4b4,
Te6edf3_sanitize_wal_checkpoint_modeTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787databaseT7ee787.T7ee787provider Tff7b72import Te6edf3DatabaseProvider
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8fftemp_db_pathTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3fdTb4b4b4, Te6edf3path Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkstempTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffcloseTb4b4b4(Te6edf3fdTb4b4b4)
Tff7b72yield Te6edf3path
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3pathTb4b4b4)
Te6edf3wal Tff7b72= Te6edf3path Tff7b72+ Ta5d6ff"Ta5d6ff-walTa5d6ff"
Te6edf3shm Tff7b72= Te6edf3path Tff7b72+ Ta5d6ff"Ta5d6ff-shmTa5d6ff"
Tff7b72for Te6edf3p Tff7b72in Tb4b4b4(Te6edf3walTb4b4b4, Te6edf3shmTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3pTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3pTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixtureTb4b4b4(Te6edf3autouseTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffreset_db_singletonTb4b4b4(Te6edf3temp_db_pathTb4b4b4)Tb4b4b4:
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Tff7b72yield
Te6edf3DatabaseProviderTff7b72.Td2a8ff_instance Tff7b72= Tff7b72None
Tff7b72def Td2a8fftest_sanitize_pragma_read_name_accepts_known_tokensTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_sanitize_pragma_read_nameTb4b4b4(Ta5d6ff"Ta5d6ffjournal_modeTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffjournal_modeTa5d6ff"
Tff7b72assert Te6edf3_sanitize_pragma_read_nameTb4b4b4(Ta5d6ff"Ta5d6ff page_size Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpage_sizeTa5d6ff"
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4,
Tb4b4b4[
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjournal modeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjournal-modeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffx;detachTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffxTa5d6ff'Ta5d6ffyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff../../../xTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpragma(x)Ta5d6ff"Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_sanitize_pragma_read_name_rejects_injectionTb4b4b4(Te6edf3badTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_sanitize_pragma_read_nameTb4b4b4(Te6edf3badTb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_sanitize_wal_checkpoint_mode_accepts_keywordsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_sanitize_wal_checkpoint_modeTb4b4b4(Ta5d6ff"Ta5d6fftruncateTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffTRUNCATETa5d6ff"
Tff7b72assert Te6edf3_sanitize_wal_checkpoint_modeTb4b4b4(Ta5d6ff"Ta5d6ffPASSIVETa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffPASSIVETa5d6ff"
Tff7b72def Td2a8fftest_sanitize_wal_checkpoint_mode_rejects_injectionTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3_sanitize_wal_checkpoint_modeTb4b4b4(Ta5d6ff"Ta5d6ffFULL);VACUUMTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3_sanitize_wal_checkpoint_modeTb4b4b4(Ta5d6ff"Ta5d6ffbogusTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_get_pragma_value_returns_default_for_malicious_nameTb4b4b4(Te6edf3temp_db_pathTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3temp_db_pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3dbTff7b72.Td2a8ff_get_pragma_valueTb4b4b4(Ta5d6ff"Ta5d6ffjournal_mode;evilTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffallbackTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fffallbackTa5d6ff"
Te6edf3jm Tff7b72= Te6edf3dbTff7b72.Td2a8ff_get_pragma_valueTb4b4b4(Ta5d6ff"Ta5d6ffjournal_modeTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3jm Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657strTb4b4b4(Te6edf3jmTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffwalTa5d6ff"
Tff7b72def Td2a8fftest_checkpoint_wal_rejects_injected_modeTb4b4b4(Te6edf3temp_db_pathTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3temp_db_pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ff_checkpoint_walTb4b4b4(Ta5d6ff"Ta5d6ffTRUNCATE);ATTACH DATABASE Ta5d6ff'Ta5d6ffxTa5d6ff'Ta5d6ff AS zTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_checkpoint_wal_passive_succeedsTb4b4b4(Te6edf3temp_db_pathTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Te6edf3temp_db_pathTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ff_checkpoint_walTb4b4b4(Ta5d6ff"Ta5d6ffPASSIVETa5d6ff"Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────